<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
     
     
           
        function Hero(name, age, sex, level) {
            this.name = name;
            this.age = age;
            this.sex = sex;
            this.level = level;

            this.sing = function () {
                console.log('唱歌');
            }

        }

        // 通过构造函数 ， 创建一个对象
        var lvbu=new Hero('吕布',22,true,18);
        var zf=new Hero('张飞',21,true,23);
        console.log(lvbu); 
        console.log(zf);
        lvbu.sing('郑州');

           /* 
            构造函数：给对象动态添加属性，返回这个对象。
            总结：
                1. 构造函数就是类
                2. 通过类这个模块，可以创建对象，
                3. 类是对象公共属性和方法的抽取，
        */

           /* 
             构造函数：
                 1. 作用，创建对象，
                 2. 返回值是一个对象，默认省略
                 3. 封装的代码是，给对象多台的添加属性和方法，
                 4. this 是当前对象，
                 5. 函数名用大驼峰
                 6. 配合关键字 new 使用
                 7. 构造函数和类是一码事
                 8. 就是对象公共属性和方法的抽取
                 9. 属性名和形参尽量保持一致，可读性强

             约定大于规范，规范大于编码
        
        */
    </script>
</body>

</html>